//remark
/**
 * 表单设计----公式
 */
mini.parse();

var url;
var mainTreeData;
var grid = mini.get("tableClass");//主表
var grid_child = mini.get("tableClass_child");//子表
var tree = mini.get("tree1");//公式
//  存放公式英文字段
var mathEngStr = '';

//获取主表树（初始化）
grid.loading();
$.ajax({
    url: ajaxUrl + "/tableClass/list.do",
    type: "POST",
    success: function (data) {
        mainTreeData = dbTree(grid,data.data);//获取主表树
    },
    error : function(data){
    }
});
// 父页面（表单设计器页面）传到公式页面（被选字段为公式初始值）
function SetData(data) {
    var data = mini.clone(data);
    console.log(data);
    if(data.pre != undefined) {
        // 如果历史公式中有\\\\，则为空字符串（无历史公式）
        if(JSON.stringify(data.pre).indexOf("\\\\\\")>-1) {
            data.pre = ""
        }
        // 如果有历史公式
        if(data.pre != "" && data.pre != "\"\"") {
            // 插入[]和光标:insertAtCursor()
            insertAtCursor(data.pre.value,false);
            select_data = data.pre.select_data;
        // 如果无历史公式
        }else {
            insertAtCursor(data.db.cLadText,true);
            // 得到英文字段拼接公式(存放到全局变量)
            mathEngStr = insertAtCursorEng(data.db.cTableField,true);
            console.log(mathEngStr,'最后保存时的英文字段公式');
            getSelectData({
                field:data.db.cTableField,
                fieldCh:data.db.cLadText,
                tableClassName:data.db.cTableName,
                PID:data.db.PID
            });
        }
    }
}

// 主表双击事件
grid.on("rowdblclick", function (e) {
    console.log(e.record);
    insertAtCursor(e.record.fieldCh,true);
    // 英文字段公式
    insertAtCursorEng(e.record.field,true);
    getSelectData(e.record)
});
// 子表双节事件
grid_child.on("rowdblclick", function (e) {
    insertAtCursor(e.record.fieldCh,true);
    // 英文字段公式
    insertAtCursorEng(e.record.field,true);
    getSelectData(e.record)
});
// 树节点双击事件
tree.on("nodedblclick", function (e) {
    console.log(e.record);
    if(e.isLeaf) {//叶节点
        console.log(e.record.id,',',e.record.text);
        insertAtCursor(e.record.name,false);
        // 英文字段公式
        insertAtCursorEng(e.record.id,true);
    }
});
// 树节点点击事件
tree.on("nodeclick", function (e) {
    console.log(e.record);
    $("#remark").html("");
    var remarks = {
        sumCols: '求子表某列的和，用法：主表字段 = sumCols(子表字段)。',
        newDate: '获取当前时间',
        StandardAmount: '获取标准金额，用法：标准金额 = StandardAmount([目标字段开始日期][目标字段结束日期][目标字段省市][目标字段地区])。',
        day: '求天数，用法：天数 = day(目标日期字段)。'
    }
    for(var item in remarks) {
        if(e.record.id == item) {
            $("#remark").html(remarks[item]);
        }
    }
});

//选中的数据存入数组
var select_data = [];
function getSelectData(record) {
    // 原来的
    //var flag = true;
    // for(var i=0;i<record.length;i++) {
    //     for(var j=0;j<select_data.length;j++) {
    //         // 如果选中的字段在被选数组中不存在，修改信号量
    //         if (record[i].field == select_data[j].field) {
    //             flag = false;
    //         }
    //     }
    // }
    // 如果选中的字段在被选数组中不存在，存入被选择数组
    // if(flag && record.PID != -1) {
    //     select_data.push(record);
    // }


    // 新的
    // 判断如果新选择的字段数据已经存放在被选数组中，那么不再存放，如果没有，push到被选择数组中(去重)
    select_data.forEach(function (item) {
        // 如果字段不一致
        if((record.field != item.field) && record.PID != -1){
            select_data.push(record);
        }
    });
    console.log(select_data,'select_data');
}


//主子表联动
function onSelectionChanged(e) {
    // var grid = e.sender;
    var record = grid.getSelected();
    if (record) {
        console.log(record,'选择的主表');

        $.ajax({
            url: ajaxUrl + "/tableClass/findByMTableToSTable.do",
            type: "POST",
            data: {
                tableClassId: record.tableClassId
            },
            success: function (data) {
                console.log(data,'主子表联动');
                // console.log(data,'data')
                console.log(grid_child,'表格');
                // grid_child.setData(data.data)
                dbTree(grid_child,data.data);
                // $('#tableClass_child').css({
                //     height: $('#form-outlookbar').height() - $('#tableClass').height()
                // })
            },
            error : function(data){
            }
        });
    }
}
// 插入[]英文
function insertAtCursorEng (field,calc) {
    var myField = '';
    if(calc) {//若为变量，加[]
        myField = '['+field+']';
    }else{
        myField = field;
    }
    // 英文字段公式字符串拼接
    mathEngStr += myField;
    console.log(mathEngStr,'最後要保存的英文字段公式');
    return mathEngStr;
}
//插入[]光标
function insertAtCursor(myValue,calc) {
    var myField = document.getElementById('textarea');
    if(calc) {//若为变量，加[]
        myValue = '['+myValue+']';
    }

    //IE 浏览器
    if (document.selection) {
        myField.focus();
        sel = document.selection.createRange();
        sel.text = myValue;
        sel.select();
    }

    //FireFox、Chrome等
    else if (myField.selectionStart || myField.selectionStart == '0') {
        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;

        // 保存滚动条
        var restoreTop = myField.scrollTop;
        myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);

        if (restoreTop > 0) {
            myField.scrollTop = restoreTop;
        }

        myField.focus();
        myField.selectionStart = startPos + myValue.length;
        myField.selectionEnd = startPos + myValue.length;
    } else {
        myField.value += myValue;
        myField.focus();
    }
}

//确定按钮之前
function onTableOk() {

    var value = $("#textarea").val();
    var newStr = value;
    var newStrEn = value;

    if(value == "") {
        return "";
    }else {
        $.each(value.match(/[^\[]+(?=\])/g), function(i, word) {
            for(var i=0;i<select_data.length;i++) {
                if(select_data[i].fieldCh == word) {
                    var re_word = word+'.'+select_data[i].field+'.'+select_data[i].tableClassName;
                    newStr = newStr.replace(word, re_word);
                    var re_word_en = select_data[i].field;
                    newStrEn = newStrEn.replace(word, re_word_en);
                }
            }
        });
        return {
            newStr: newStr,
            newStrEn: newStrEn,
            value: value,
            select_data: select_data,
            mathEngStr: mathEngStr
        };
    }
}

//确定按钮
function onOk(e) {
    CloseWindow("ok");
}
//取消按钮
function onCancel(e) {
    CloseWindow("cancel");
}

function CloseWindow(action) {
    if (window.CloseOwnerWindow)
        return window.CloseOwnerWindow(action);
    else
        window.close();
}

//表格树数据加载
var dbData = [];//存放转换后的数据库表数据
function dbTree(grid1,data) {
    dbData = [];
    console.log(data,'data');
    for(var i=0;i<data.length;i++) {
        dbData[i] = {
            tableClassName: data[i].tableClassName,
            tableChClassName: data[i].tableChClassName,
            cTableName: data[i].tableChClassName,
            field: '',
            fieldCh: '',
            tableClassId: data[i].tableClassId + '',//id
            PID: -1,
            checked: false,
//            expanded: true,
            children:[]
        };
        for(var j=0;j<data[i].children.length;j++) {
            var c = data[i].children[j];
            dbData[i].children.push({
                // cTableField: c.field,
                cTableName: data[i].tableChClassName,
                tableClassName: data[i].tableClassName,
                // formListId: data[i].formListId,
                type: c.type,
                field: c.field,
                fieldCh: c.fieldCh,
                tableClassId: c.tableId + '',//id
                PID: data[i].tableClassId + '',
//                expanded: true,
                checked: false
            });
        }
    }
    console.log(dbData,'dbData');
    grid1.setData(dbData);
    return dbData;
}
// 当公式文本框的值发生改变时发生
// function  onValuechanged(e) {
//     console.log(e);
// }
mini.get('textarea').on('valuechanged',function (e) {
    console.log(e);
})